//给你一个正整数 n ，生成一个包含 1 到 n² 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 
//
// 
//
// 示例 1： 
//
// 
//输入：n = 3
//输出：[[1,2,3],[8,9,4],[7,6,5]]
// 
//
// 示例 2： 
//
// 
//输入：n = 1
//输出：[[1]]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= n <= 20 
// 
// Related Topics 数组 矩阵 模拟 👍 745 👎 0


package com.cjl.leetcode.editor.cn;

/**
 * [P59]_螺旋矩阵 II
 *
 * @author cjl
 * @date 2022-06-26 18:24:33
 */
public class P59_SpiralMatrixIi {
    public static void main(String[] args) {
        //测试代码
        Solution solution = new P59_SpiralMatrixIi().new Solution();
        System.out.println("args = " + solution.generateMatrix(3));
    }

    //力扣代码
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /**
         * 解题思路：按顺序写入数组；
         *
         * @param n
         * @return
         */
        public int[][] generateMatrix(int n) {
            int[][] result = new int[n][n];
            int widthMin = 0, widthMax = n, heightMin = 0, heightMax = n;
            int t = 1, i = 0, j = 0, dir = 0;
            while (t <= n * n) {
                result[i][j] = t;
                t++;
                if (dir % 4 == 0 && j < widthMax - 1) {
                    j++;
                } else if (dir % 4 == 0 && j == widthMax - 1) {
                    i++;
                    dir++;
                    heightMin++;
                } else if (dir % 4 == 1 && i < heightMax - 1) {
                    i++;
                } else if (dir % 4 == 1 && i == heightMax - 1) {
                    j--;
                    dir++;
                    widthMax--;
                } else if (dir % 4 == 2 && j > widthMin) {
                    j--;
                } else if (dir % 4 == 2 && j == widthMin) {
                    i--;
                    dir++;
                    heightMax--;
                } else if (dir % 4 == 3 && i > heightMin) {
                    i--;
                } else if (dir % 4 == 3 && i == heightMin) {
                    j++;
                    dir++;
                    widthMin++;
                }

            }
            return result;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}